/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package op;

import core.QuebraString;
import java.util.Date;
import java.util.Map;
import java.util.StringTokenizer;

/**
 *
 * @author Jônatas
 */
public class QuebraStringGVT implements QuebraString {

    public EntradaAbstrata quebraString(Map<String, Object> parametersMap) throws Exception {

        Boolean isLigacao = (Boolean) parametersMap.get("isLigacao");

        if (isLigacao) {
            return quebraLigacao(parametersMap);
        } else {
            return quebraOutros(parametersMap);
        }

    }

    private EntradaAbstrata quebraLigacao(Map<String, Object> parametersMap) {

        String tipo = (String) parametersMap.get("tipo");

        StringTokenizer tokenizer = (StringTokenizer) parametersMap.get("tokenizer");

        String data = (String) parametersMap.get("data");
        String hora = tokenizer.nextToken();
        String tempo = tokenizer.nextToken();

        Date date = EntradaAbstrata.criaDate(data, hora);

        Integer duracao = EntradaAbstrata.getDuracaoLigacaoSegundos(tempo);

        String strDestino = "";

        do {
            strDestino = tokenizer.nextToken();
        } while (!strDestino.matches("[0-9]{10}"));

        Telefone destino = new Telefone("0" + strDestino);

        String line = (String) parametersMap.get("line");

        EntradaAbstrata entrada = new Ligacao();

        if (line.contains("cobrar") || line.contains("Cobrar")) {
            entrada.setDuracaoLigacaoACobrarSegundos(duracao);
            tipo += " - A Cobrar";
        } else {
            entrada.setDuracaoLigacaoSegundos(duracao);
        }

        Telefone origem = (Telefone) parametersMap.get("origem");

        entrada.setPlanoLigacao(tipo);
        entrada.setTipoDeLigacao(tipo);
        entrada.setDataOrigemLigacao(date);
        entrada.setDestino(destino);
        entrada.setNumeroDeOrigem(origem);

        String custo = "";

        while(tokenizer.hasMoreTokens()) {
            custo = tokenizer.nextToken();
        }

        custo = custo.replace(",", ".");

        entrada.setCusto(Double.valueOf(custo));

        return entrada;
    }

    private EntradaAbstrata quebraOutros(Map<String, Object> parametersMap) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}
